/**
 * @Author: linzp
 * @Date: 2021/08/20/10:40
 * 简单工厂-工厂方法-抽象工厂
 *
 * 这里是工厂方法
 * 只要按照抽象产品角色、抽象工厂角色提供的合同来生成，那么就可以被客户使用，而不必去修改任何已有的代码。
 * （即当有新产品时，只要创建并基础抽象产品；新建具体工厂继承抽象工厂；而不用修改任何一个类）
 * 工厂方法模式是完全符合开闭原则的！
 */
public class factory {
    public static void main(String[] args) {
        Car PorscheCar,BmwCar;

        //建厂
        PorscheCarFactory porscheCarFactory = new PorscheCarFactory();
        BmwCarFactory bmwCarFactory = new BmwCarFactory();

        //生产
        PorscheCar = porscheCarFactory.productPorscheCar();
        BmwCar = bmwCarFactory.productBmwCar();

        //4儿子店试车
        PorscheCar.work();
        BmwCar.work();

    }
}

/*************************************************************************/

//汽车工厂
interface CarFactory{}

//保时捷厂 生产车
class PorscheCarFactory implements CarFactory{
    public PorscheCar productPorscheCar(){
        System.out.println("众泰工厂生产保时捷汽车");
        return new PorscheCar();
    }

}

//宝马厂
class BmwCarFactory implements CarFactory{
    public BmwCar productBmwCar(){
        System.out.println("宝马工厂生产宝马汽车");
        return new BmwCar();
    }
}

/*************************************************************************/

//抽象产品
interface Car {
    void work();
}

//具体产品
class PorscheCar implements Car{

    @Override
    public void work() {
        System.out.println("保时泰工作");
    }
}

class       BmwCar implements Car{

    @Override
    public void work() {
        System.out.println("宝马工作");

    }
}

/*************************************************************************/

